package org.example.aspect;

import org.example.service.UserService;
import org.example.service.UserServiceImpl;

import java.lang.reflect.Proxy;

public class JdkProxyTest {
    public static void main(String[] args) {
        UserService target = new UserServiceImpl();
        // 创建代理对象
        /*
         * JDK动态代理方法
         * ClassLoader loader :类加载器
         * Class<?>[] interfaces:接口的泛型
         *  InvocationHandler h: 增强方法（代理类的方法）
         */
        UserService userServiceProxy = (UserService) Proxy.newProxyInstance(
                target.getClass().getClassLoader(), target.getClass().getInterfaces(),
                // 方法增强
                (proxy, method, methodArgs) -> {
                    Object result = null;
                    try {
                        System.out.println("开启事务:");
                        // 调用目标对象的方法
                        result = method.invoke(target, args);
                        System.out.println("|____提交事务。。。");
                    } catch (Exception e) {
                        e.printStackTrace();
                        System.out.println("|____回滚事务。。。");
                    } finally {
                        System.out.println("|____关闭事务。");
                    }
                    return result;
                });
        userServiceProxy.init();

    }

}
